
// import a from '@/store';
// import b from '@/store/index';
// import c from '@/store/index.js';
// 后面的文件引入写法一致

import store from '@/store';

// 配置基准路径
const baseURL = "https://pcapi-xiaotuxian-front-devtest.itheima.net";

// 配置对象
const request = {
    // invoke拦截前触发
    invoke(args) {
        //显示加载中
        uni.showLoading({
            title: "加载中",
        });
        if (!args.url.startsWith("http")) {
            //判断请求路径头是否不包含http
            // 配置请求头为基准路径加上请求路径
            args.url = baseURL + args.url;
        }
        // 配置请求头
        args.header = {
            // 解构原来请求头里面的内容(保留原本的header)
            ...args.header,
            // 添加来源客户端标识  
            "source-client": "miniapp",//添加小程序端调用标识
        };
        // 判断vuex是否有token,有就携带给请求头
        // console.log(' store ----->  ', store);
        // 如果没有token的话store.state.user.userInfo为null, null.token就报错了，所以我们需要先判断store.state.user.userInfo是否有值
        // 利用与的短路运算，一假为假,如果前面为空,后面不再执行
        if (store.state.user.userInfo && store.state.user.userInfo.token) {
            args.header.Authorization = store.state.user.userInfo.token
        } else {
            console.log(' 没有token');
        }
    },
    // complete请求完成触发
    complete(res) {
        //隐藏加载中
        uni.hideLoading();
    },
};

// uni.addInterceptor("request", OBJECT);
uni.addInterceptor("request", request);
uni.addInterceptor("uploadFile", request);


export default (options) => {
    return new Promise((resolve, reject) => {
        // uniapi 如果有返回值 返回值就是一个数组
        // const res = await uni.request
        uni.request({
            // 解构出原来的请求参数包含url,get,header之类的
            ...options,
            // 如果你没有直接用awiat 而是用传统的success方式的话返回的就是一个对象
            success(res) {
                // 400多,500多都是失败,所以判断状态码如果大于200或小于300为成功
                if (res.statusCode >= 200 && res.statusCode <= 300) {
                    resolve(res.data) //成功的回调
                } else {
                    //在这处理响应失败
                    // 如果响应状态码为401的话,跳转到登录页面
                    if (res.statusCode === 401) {
                        uni.showToast({ title: '未登录,请登录', icon:'error'})
                        setTimeout(() => {
                            uni.navigateTo({url:'/pages/login/index'})
                        }, 1500);
                    }

                    reject(res) //失败的回调
                }
            },
            fail(err) {
                reject(err) //失败的回调
            }
        })

    })
}
